import { NativeModules, NativeEventEmitter, Platform } from 'react-native';

const { CompassModule } = NativeModules;

let compassEventEmitter = null;

if (CompassModule) {
  compassEventEmitter = new NativeEventEmitter(CompassModule);
}

/**
 * 罗盘模块 - 获取设备朝向（静止时也有效）
 */
const Compass = {
  /**
   * 检查设备是否支持罗盘
   * @returns {Promise<boolean>}
   */
  isAvailable: async () => {
    if (!CompassModule) {
      return false;
    }
    try {
      return await CompassModule.isHeadingAvailable();
    } catch (error) {
      console.error('[Compass] 检查可用性失败:', error);
      return false;
    }
  },

  /**
   * 开始监听罗盘方向
   * @param {Function} callback - 回调函数，参数: { heading: number, accuracy: number }
   * @returns {Object} - 订阅对象，用于取消监听
   */
  startHeadingUpdates: (callback) => {
    if (!CompassModule || !compassEventEmitter) {
      console.error('[Compass] 原生模块不可用');
      return null;
    }

    try {
      // 开始原生监听
      CompassModule.startHeadingUpdates();

      // 订阅事件
      const subscription = compassEventEmitter.addListener(
        'headingUpdated',
        (data) => {
          if (callback && typeof callback === 'function') {
            callback(data);
          }
        }
      );

      return subscription;
    } catch (error) {
      console.error('[Compass] 启动监听失败:', error);
      return null;
    }
  },

  /**
   * 停止监听罗盘方向
   * @param {Object} subscription - startHeadingUpdates 返回的订阅对象
   */
  stopHeadingUpdates: (subscription) => {
    if (!CompassModule) {
      return;
    }

    try {
      // 取消事件订阅
      if (subscription && typeof subscription.remove === 'function') {
        subscription.remove();
      }

      // 停止原生监听
      CompassModule.stopHeadingUpdates();
    } catch (error) {
      console.error('[Compass] 停止监听失败:', error);
    }
  },
};

export default Compass;
